iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

[Day05] Clojure data structure之collection系列(2) Lists

我們今天來用小小的一加一等於二,說明Clojure的List和一般程式語言有蠻大的差別。

Lists

List是Clojure程式的最小執行單位,像我們之前常常舉例的一加一等於二啦

tutorial.core=> (+ 1 1)
2
  • 對clojure來說,不管怎樣都會有回傳值(至少也會有nil)
    • 回傳可能是function 可能是variable
    • 整個program都是一串求值的過程
    • 沒有statement和expression的差別

那,沒有statement和expression的差別這句話究竟是什麼意思呢?

Javascript 或/和其他OOP語言的特性: statement和expression

關於statement和expression的說明,我們又請出了javascript來舉例:)

  • statement:函式陳述式(或者叫declaraion,函數宣告式),當作函式宣告,這種程式沒有回傳值,不能將其命名成變數,也不能立即調用。
// 1 === 1 是陳述式
if( 1===1 ){
    console.log("It's true")
}

// 或者叫函式宣告式,長這樣
function statementExample = {
// (略)
}
  • expression:函式表達式,寫法是宣告一個將function存取起來變數,而這個function可以命名也可以不命名。可以被立即調用。ES6之後可以用箭頭函式取代
// 有命名的function
const expressionExample = function name() {
}

// 也可以不命名
var expressionExample = function () {
     console.log('我是函式表達式')
}

// 箭頭函式

var expressionExample = () => console.log('我是函式表達式')

// 來調用看看
expressionExample
//變數表達的是整個函式
ƒ () {
     console.log('我是函式表達式')
}

// 傳進參數的函式

var arrowFunction = function (x) { 
    return x + 1 
}

// 箭頭函式也可以寫成

var arrowFunction = (x) => x + 1

  • 對ruby這類型的OOP物件導向程式語言來說,最小可執行是的expression 1+1,

同樣的如果用method方式撰寫

def one_plus_one 
  1 + 1 = 2 
end
  • 單獨的function單獨存在就不會太大用途。沒有return value
  • 除非要有個object把function掛上去

所以有沒有覺得clojure的List雖然是小小的()小括弧,寫法也很簡單,但功能強大呀!

Clojure: 對表達式(expression)求值的處理

Clojure 程式是直接以「資料data」呈現的,
第一步是先把文字characters定義透過Reader化成data structures

這部分是和其他語言例如(Java)最不一樣的地方。(圖片來源:clojure官網)

我們可以說,一開始舉例的(+ 1 1)這個List,
就是對一個「表達式(expression)」求值的處理

更進一步說明,Clojure是由reader一次讀取一個form,再evalute出 from 代表的值

沒想到一個基本的List collection的data structure就可以寫這麼長篇幅(話太多),但是這些觀念都很重要唷!

那麼,明天及後天請繼續收看collection的第三、第四集:Maps & Sets!


上一篇
[Day04] Clojure data structure之collection系列(1) Vectors
下一篇
[Day06] Clojure data structure之collection系列(3) Maps
系列文
後端Developer實戰ClojureScript: Reagent與前端框架 Reframe30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言